10 REM DATAFILE 2.9 BY MIKE KONSHAK 12 POKE53280,13:POKE53281,11:PRINT"[158]":GOSUB16:IFX=0THENGOTO66 14 GOTO68 16 D$=CHR$(0):MR$=D$:DR$=D$:S=0:B1$=D$:PW=0:CW=0:B$=CHR$(32) 18 NC=0:NL=0:PG=0:F1=0:F2=0:F3=0:L$=D$:RL=0:SB$=D$:CR$=CHR$(13):HN$=D$:ID$=D$ 20 A$=D$:C$=D$:T%=0:I$=D$:CK=0:I=0:J=0:K=0:L=0:M=0:N=0:RW=5:SF=0:Z=0:E$="EOF" 22 EN=0:EM$=D$:ET=0:ES=0:A1$=D$:A2$=D$:A3$=D$:S1$=D$:FL=0 23 MEM=30000:RETURN 24 DIMF$(F+1),T%(F+1),L%(F+1):RETURN 26 DIMREC$(R+1,F+1),ML$(9,4),PC(10),TT$(5),HC$(9),K%(R+1):RETURN 28 REM--GET 30 GETA$:IFA$=""THEN30 32 RETURN 34 REM--CREATE 36 IFCK<>0THENGOSUB394 38 PRINT"[147]  INITIALIZE DATAFILE " 40 CLR:GOSUB16:INPUT"HOW MANY FIELDS IN EACH RECORD? 0 [157][157][157][157]";F:IFF=0THEN68 42 GOSUB24:FORI=1TOF 44 PRINT"FIELD #";I:PRINT"TITLE ? > " 46 PRINT"LENGTH? 0 " 47 PRINT"";TAB(6);:INPUTF$(I):IFF$(I)=""THENF$(I)=">" 48 PRINTTAB(6);:INPUTL%(I):IFL%(I)=0THEN68 49 NEXTI 50 REM--COMPUTE # RECORDS 52 FORJ=0TOF:RL=RL+L%(J):NEXTJ:RL=RL+3*(F+1)+5:R=INT((MEM-12*(F+1)-2100)/RL) 54 PRINT" YOUR SELECTIONS WILL ALLOW APPROX" 56 PRINTR;"RECORDS. A[146]CCEPT OR R[146]EJECT?" 58 GOSUB30:IFA$="R"THEN38 59 IFA$="A"THENGOSUB26:CK=1 60 FORI=1TOF:IFLEN(F$(I))>S1THENS1=LEN(F$(I)) 62 NEXTI:GOTO68 64 REM MENU 66 PRINT"[147]  DATAFILE 2.9 BY MIKE KONSHAK ":GOTO70 68 PRINT"[147]  DATAFILE MENU " 70 PRINT" C[146]REATE NEW FILE Q[146]UIT PROGRAM 72 [153]" AWAITDD RECORD TO CURRENT FILE" 74 [153]" MWAITODIFY RECORD IN CURRENT FILE" 76 [153]" DWAITELETE RECORD IN CURRENT FILE" 78 [153]" VWAITIEW FILE ON SCREEN 80 PRINT" S[146]ORT RECORDS BY FIELD 82 [153]" PWAITRINT RECORDS BY SELECTION 84 PRINT" R[146]EAD OLD FILE FROM DISK" 86 PRINT" W[146]RITE NEW FILE TO DISK 88 [153]" @WAIT DISK DRIVE COMMANDS 90 PRINT"  PRESS THE APPROPRIATE KEY " 92 PRINT" THERE ARE";X;"RECORDS IN MEMORY" 94 IFR>0THENPRINT" SPACE FOR";R-X;"MORE RECORDS[145]" 96 GOSUB30:IFA$="A"THENGOSUB350:IFFL=0THEN124 98 IFA$="M"THENGOSUB354:IFFL=0THEN244 100 IFA$="D"THENGOSUB354:IFFL=0THEN272 102 IFA$="C"THEN36 104 IFA$="R"THEN170 106 IFA$="P"THENGOSUB354:IFFL=0THEN358 108 IFA$="V"THENGOSUB354:IFFL=0THEN192 110 IFA$="W"THENGOSUB350:IFFL=0THEN144 112 IFA$="S"THENGOSUB354:IFFL=0THEN304 114 IFA$="Q"THEN342 116 IFA$="@"THEN462 118 IFFL<>0THENFL=0:GOTO68 120 GOTO96 122 REM--ADD RECORDS 124 FORI=X+1TOR:PRINT"[147] PRESS THE RETURN[146] KEY AFTER EACH ENTRY" 126 PRINT" PRESS RETURN[146] WITHOUT ANY ENTRY TO STOP" 128 PRINT" RECORD NUMBER ";I;"" 130 FORN=1TOF 132 PRINTF$(N);" >[157][157][157]";:INPUTREC$(I,N):IFREC$(I,N)=""THENREC$(I,N)=">" 134 IFLEN(REC$(I,N))>L%(N)THENGOSUB140:GOTO132 136 IFREC$(I,1)=">"THENX=I-1:CK=1:GOTO68 138 NEXTN:K%(I)=I:NEXTI:X=R:CK=1:GOTO68 140 PRINT"CANNOT EXCEED";L%(N);" CHARACTERS":RETURN 142 REM SAVE 144 PRINT"[147]ENTER NAME OF CURRENT FILE TO BE SAVED" 146 PRINT"(12 CHARACTERS MAX). ANY AXISTING FILE" 148 PRINT"WITH THE SAME NAME WILL BE SCRATCHED." 150 PRINT" ";NF$:INPUT"[145]";NF$:IFNF$=""THEN68 152 OPEN15,8,15:PRINT#15,"S0:DF] "+LEFT$(NF$,8)+"!OLD":GOSUB414:IFET=8THEN68 154 PRINT#15,"R0:DF] "+LEFT$(NF$,8)+"!OLD=DF] "+NF$:GOSUB414:IFET=8THEN68 156 OPEN5,8,5,"0:DF] "+NF$+",S,W":GOSUB414:IFET=8THEN68 158 PRINT#5,R;CR$;F;CR$;X:FORN=1TOF:PRINT#5,F$(N);CR$;L%(N):NEXTN 159 GOSUB414:IFET=8THEN68 160 FORI=1TOX:PRINT"SAVING RECORD #";I;"[145][145]" 162 FORN=1TOF:PRINT#5,REC$(K%(I),N):NEXTN:NEXTI:PRINT:GOSUB414:IFET=8THEN68 164 FORI=1TOX:PRINT" SAVING POINTERS";I;"[145][145]":PRINT#5,I:NEXTI 165 PRINT#5,E$:GOSUB414:IFET=8THEN68 166 CLOSE5:CLOSE15:CK=0:GOTO68 168 REM LOAD 170 IFCK<>0THENGOSUB394 172 CLR:GOSUB16:PRINT"[147] ENTER NAME OF FILE TO BE LOADED":INPUTNF$ 173 IFNF$=""THEN68 174 OPEN15,8,15:OPEN5,8,5,"0:DF] "+NF$+",S,R":GOSUB414:IFET=8THEN68 175 IFEN=62THENGOSUB416:GOTO68 176 INPUT#5,R,F,X:GOSUB414:IFET=8THEN68 177 GOSUB24:GOSUB26:FORN=1TOF:INPUT#5,F$(N),L%(N):NEXTN:GOSUB414:IFET=8THEN68 178 FORI=1TOX:PRINT"READING RECORD #";I;"[145][145]" 180 FORN=1TOF:INPUT#5,REC$(I,N):NEXTN:NEXTI:PRINT:GOSUB414:IFET=8THEN68 182 FORI=1TOX:PRINT"READING POINTERS";I;"[145][145]":INPUT#5,K%(I):NEXTI 184 S=ST:IFS<>0THEN188 186 INPUT#5,E$:GOSUB414:IFET=8THEN68 188 CLOSE5:CLOSE15:GOTO60 190 REM VIEW 192 I=1 194 IFI=0THEN68 196 IFI>XTHEN68 198 PRINT"[147] RECORD NUMBER:"+STR$(I)+" FILE:"+NF$+"" 200 FORN=1TOF:PRINTF$(N);": ";REC$(K%(I),N):NEXTN 202 PRINT" N[146]EXT, L[146]AST, J[146]UMP, F[146]IND, E[146]XIT TO MENU" 204 GOSUB30:IFA$="N"THENI=I+1:GOTO194 206 IFA$="L"THENI=I-1:GOTO194 208 IFA$="J"THEN216 210 IFA$="F"THEN218 212 IFA$="E"THEN68 214 GOTO204 216 INPUT"JUMP TO RECORD NUMBER";I:GOTO194 218 PRINT"[147] FIND RECORDS WITH COMMON ITEMS " 220 FORN=1TOF:PRINT" ";N;"[146] ";F$(N):NEXTN 222 INPUT"WHICH FIELD IS TO BE SEARCHED? 0 [157][157][157][157]";SF:IFSF=0THEN68 224 IFSF<1ORSF>FTHENPRINT"[145][145][145]":GOTO222 226 PRINT"ENTER COMMON ITEM[146] ":PRINT"(THE ENTIRE STRING IS NOT REQUIRED)" 228 PRINT"";F$(SF);"[146] ";:INPUTT$ 230 FORI=1TOX:PRINT"SEARCHING RECORD";I;"[145][145]" 232 IFT$=LEFT$(REC$(K%(I),SF),LEN(T$))THEN236 234 GOTO240 236 PRINT"[147] RECORD #";I;"":FORN=1TOF:PRINTF$(N);": ";REC$(K%(I),N):NEXTN 238 PRINT" N[146]EXT RECORD":GOSUB30 240 NEXTI:GOTO68 242 REM MODIFY 244 PRINT"[147] MODIFY WHICH RECORD? ENTER #[146] OR A[146]LL":INPUTMR$:IFMR$=D$THEN68 246 IFMR$="A"THENMR$=D$:GOTO254 248 I=VAL(MR$):MR$=D$ 250 IFI>XTHENGOSUB348:GOTO244 252 GOSUB256:GOTO68 254 FORI=1TOX:GOSUB256:NEXTI:GOTO68 256 PRINT"[147]TO MODIFY RECORD NUMBER";I;", MAKE CHANGES" 258 PRINT"AS EACH FIELD IS DISPLAYED, THEN RETURN[146]" 260 FORN=1TOF:PRINTF$(N)":":PRINT" ";REC$(K%(I),N) 261 IFLEN(REC$(K%(I),N))>36THENPRINT"[145]"; 262 PRINT"[145] ";:INPUTREC$(K%(I),N) 264 IFLEN(REC$(K%(I),N))>L%(N)THENGOSUB140:GOTO260 266 IFREC$(K%(I),N)=""THENREC$(K%(I),N)=">" 268 NEXTN:CK=1:RETURN 270 REM DELETE 272 PRINT"[147] DELETE WHICH RECORD? ENTER #[146] OR A[146]LL" 274 INPUTDR$:IFDR$=D$THEN68 276 IFDR$="A"THENDR$=D$:GOTO282 278 I=VAL(DR$):DR$=D$:IFI>XTHENGOSUB348:GOTO274 280 GOSUB284:GOTO68 282 FORI=1TOX:GOSUB284:NEXTI:GOTO68 284 PRINT"[147] TO DELETE RECORD NUMBER";I;", PRESS" 286 PRINT" SHIFT[146] D[146], PRESS SPACE BAR[146] TO ADVANCE" 288 FORN=1TOF:PRINTF$(N);" ";REC$(K%(I),N):NEXTN 290 GOSUB30:IFA$="[196]"THEN294:REM SHIFTED D 292 CK=1:RETURN 294 PRINT"DELETING RECORD";I:PRINT"RECORDS MAY NOW BE OUT OF ORDER" 296 FORN=1TOF:REC$(K%(I),N)=REC$(X,N):REC$(X,N)="":NEXTN 298 FORJ=1TOX:IFK%(J)=XTHENK%(J)=K%(X):K%(X)=0:X=X-1:GOTO292 300 NEXTJ 302 REM SORT 304 PRINT"[147]  SORT RECORDS IN ASCENDING ORDER " 306 FORN=1TOF:PRINT" ";N;"[146] ";F$(N):NEXTN 308 INPUT"WHICH FIELD IS TO BE SORTED? 0 [157][157][157][157]";SF:IFSF=0THEN68 310 IFSF>FTHENPRINT"[145][145][145]":GOTO308 312 PRINT" PLEASE WAIT[146]":M=X 314 M=INT(M/2):IFM=0THENCK=1:GOTO68 316 J=1:K=X-M 318 I=J 320 L=I+M 322 PRINT"SORTING [157][157][157][157][157]";I;"[145]" 324 IFREC$(K%(I),SF)<=REC$(K%(L),SF)THEN328 326 T%(N)=K%(I):K%(I)=K%(L):K%(L)=T%(N):I=I-M:IFI>0THEN320 328 J=J+1:IFJ>KTHEN314 330 GOTO318 332 REM QUIT 334 PRINT"[147] [150]YOU HAVE NOT SAVED YOUR CHANGES![158]" 336 PRINT" DOYOU REALLY WANT TO QUIT? Y[146] OR N[146] 338 [141]30:[139]A$[178]"Y"[167]344 340 [137]68 342 [139]CK[179][177]0[167]334 344 [153]"LOADDATAFILE TERMINATED":[128] 346 [143] ERROR CHECK 348 [153]" DEFNO SUCH RECORD EXISTSSYS":[142] 350 [139]R[177]0[167][142] 352 [153]" DEF NO RECORDS OR FILES IN MEMORY SYSWAIT " 353 [129]I[178]1[164]500:[130]I:FL[178]1:[142] 354 [139]X[177]0[167][142] 355 [141]352:[142] 356 [143] LOAD PRINT 358 [153]"LOAD  PRINTER MAIN MENU " 360 [153]" PRINT RECORDS USING: 362 PRINT" R[146]EPORTS AND LISTS 364 [153]" MWAITAILING LABELS 366 PRINT" U[146]SER DEFINED SUBPROGRAM 368 [153]" EWAITXIT TO MAIN MENU 370 PRINT"  PRESS THE APPROPRIATE KEY " 372 GOSUB30:IFA$="R"THEN384 374 IFA$="E"THEN68 376 IFA$="U"THEN386 378 IFA$="M"THEN382 380 GOTO372 382 PRINT"[147] LOADING MAILING LABEL SUBPROGRAM":LOAD"DFMAIL",8 384 PRINT"[147] LOADING REPORT/LISTING SUBPROGRAM":LOAD"DFREPORT",8 385 REM ?"[147] LOADING CALCULATIONS SUBPROGRAM":LOAD"DFCALC",8 386 PRINT"[147] ENTER NAME OF SUBPROGRAM" 388 PRINT"";SB$:INPUT"[145]";SB$:IFSB$=D$THEN358 389 OPEN15,8,15:OPEN5,8,5,"0:"+SB$+",P,R":GOSUB414:IFEN=62THENGOSUB416:GOTO358 390 CLOSE5:CLOSE15:LOADSB$,8 392 REM WARNING 394 PRINT"[147] [150]THIS WILL DESTROY THE FILE IN MEMORY![158]" 396 PRINT" SAVE THE FILE FIRST? Y[146] OR N[146]":GOSUB30:IFA$="N"THENRETURN 398 GOTO68 400 REM NEW DISK 402 PRINT"[147] THIS WILL ERASE THE DISK![158]" 403 PRINT" ARE YOU SURE? Y[146] OR N[146] 404 [141]30:[139]A$[178]"N"[167]68 406 [139]A$[179][177]"Y"[167]68 408 [133]" DISK NAME,IDWAIT";HN$,ID$:[139]HN$[178]D$[167]68 410 [159]15,8,15:[152]15,"NEW0:"[170]HN$[170]","[170]ID$:[141]414:[139]ET[178]8[167]462 411 [160]15:[137]462 412 [143] DISK ERROR 414 [132]15,EN,EM$,ET,ES:[139](EN[179]20)[176](EN[178]62)[167]ET[178]0:[142] 416 [153]" DEFDISK ERRORWAIT"EN"CMD, "EM$","ET"CMD,"ES"SYS":ET[178]8 418 [153]" PRESS ANY KEYWAIT TO RETURN TO MENU":[141]30:[160]5:[160]15:[142] 420 [143] DIRECTORY 422 [159]15,8,15:[159]5,8,0,"$0":[153]"LOAD":[141]414:[139]ET[178]8[167]462 424 [161]#5,A1$,A2$ 426 [161]#5,A1$,A2$ 428 [161]#5,A1$,A2$ 430 [139]A1$[179][177]""[167]A0[178][198](A1$) 432 [139]A2$[179][177]""[167]A0[178]A0[170][198](A2$)[172]256 434 [153][202]([196](A0),2);[163]3); 436 [161]#5,A2$:[139]ST[179][177]0[167]454 438 [139]A2$[179][177][199](34)[167]436 440 [161]#5,A2$:[139]A2$[179][177][199](34)[167][153]""A2$"WAIT";:[137]440 442 [161]#5,A2$:[139]A2$[178][199](32)[167]442 444 [153][163]20);:A3$[178]"" 446 A3$[178]A3$[170]A2$:[161]#5,A2$:[139]A2$[179][177]""[167]446 448 [153][200](A3$,3) 450 [161]A$:[139]A$[179][177]""[167][141]458 452 [139]ST[178]0[167]426 454 [153]" BLOCKS FREE";:A0[178]0 456 [160]5:[160]15:[153][163]25)"PRESS ANY KEYWAIT":[141]30:[137]462 458 [141]30:[142] 460 [143] DISK COMMANDS 462 [153]"LOAD  DISK COMMANDS MENU " 464 [153]" $WAIT DISK DIRECTORY 466 PRINT" F[146]ORMAT A BLANK DISK 468 [153]" SWAITCRATCH A SEQ FILE 470 PRINT" R[146]ENAME A SEQ FILE 472 [153]" EWAITXIT TO MAIN MENU 474 PRINT"  PRESS THE APPROPRIATE KEY " 476 GOSUB30:MR$=D$:DR$=D$:IFA$="$"THEN422 478 IFA$="F"THEN402 480 IFA$="S"THENGOSUB498:GOTO488 482 IFA$="E"THEN68 484 IFA$="R"THENGOSUB498:GOTO493 486 GOTO476 488 INPUT" SCRATCH FILE NAME [146]";DR$:IFDR$=D$THEN462 490 OPEN15,8,15:OPEN5,8,5,"0:"+DR$+",S,R":GOSUB414:IFET=8THEN462 492 CLOSE5:PRINT#15,"S0:"+DR$+:CLOSE15:GOTO462 493 INPUT" RENAME OLD FILE[146]";DR$:IFDR$=D$THEN462 494 INPUT"  TO NEW FILE [146]";MR$:IFMR$=D$THEN462 495 OPEN15,8,15:OPEN5,8,5,"0:"+DR$+",S,R":GOSUB414:IFET=8THEN462 496 CLOSE5:PRINT#15,"R0:"+MR$+"="+DR$:OPEN5,8,5:GOSUB414:IFET=8THEN462 497 CLOSE5:CLOSE15:GOTO462 498 PRINT"[147] ENTER FILE NAMES EXACTLY AS SHOWN" 499 PRINT" ON THE DIRECTORY":RETURN